#ifndef HEAPSORT_H
#define HEAPSORT_H

#include "sortalgorithm.h"

// 堆排序类，继承自抽象基类 SortAlgorithm
class HeapSort : public SortAlgorithm {
public:
    // 构造函数，接收初始数据与排序方向
    HeapSort(const QVector<int> &values, SortOrder order);

    // 执行一步堆排序操作（构建堆或取出堆顶元素）
    void step() override;

    // 判断排序是否完成
    bool isFinished() const override;

    // 获取当前排序数据（包含颜色信息）
    const QVector<SortBar>& getData() const override;

    // 获取并清除本轮比较次数
    int getAndResetCompareCount() override;

    // 获取并清除本轮交换次数
    int getAndResetSwapCount() override;

    // 返回算法的复杂度说明
    QString getComplexityInfo() const override;

    // 设置排序方向（升序或降序）
    void setOrder(SortOrder order) override;

private:
    QVector<SortBar> bars;       // 用于可视化的数据（每个元素包含值和颜色）
    int heapSize;                // 当前堆的大小
    int phase;                   // 阶段标志：0 为建堆，1 为排序
    int current;                 // 当前 heapify 的索引
    int compareCount;            // 当前步中比较次数
    int swapCount;               // 当前步中交换次数
    SortOrder sortOrder = SortOrder::Ascending;  // 排序方向（默认升序）

    // 堆调整函数：以 i 为根调整大小为 n 的堆
    void heapify(int n, int i);
};

#endif // HEAPSORT_H
